/***********************************************
 @Name :        小谭老师
 @Time :        2025-2-22
 @Email :       tan.zhipeng@outlook.com
 @Comment :     功能窗口 智能家居
 @FileName :    widget_funcc_smart_home.cpp
 @Version :     1.0
************************************************/

#include "widget_funcc_smart_home.h"
#include "ui_widget_funcc_smart_home.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QPushButton>  // 添加QPushButton头文件
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QCamera>


Widget_funcC_Smart_Home::Widget_funcC_Smart_Home(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget_funcC_Smart_Home),
    imageCycler(nullptr),  // 初始化成员指针为nullptr
    cameraWidget(nullptr)  // 初始化成员指针为nullptr
{
    ui->setupUi(this);
    
    ui->label_return_home->setPixmap(QPixmap("D:\\QT\\qt\\project\\Qt_Echo_Vision\\img\\home_start_close.png"));
    ui->label_run_home->setPixmap(QPixmap(":/状态按钮_关"));
    ui->label_up_home_1->setPixmap(QPixmap(":/状态按钮_关"));
    ui->label_down_home_1->setPixmap(QPixmap(":/状态按钮_关"));
    ui->label_return_home_2->setPixmap(QPixmap(":/灯关"));
    ui->label_return_home_4->setPixmap(QPixmap(":/空调关"));
    ui->label_run_home_2->setPixmap(QPixmap(":/灯关"));
    ui->label_run_home_3->setPixmap(QPixmap(":/空调关"));
    ui->label_run_home_4->setPixmap(QPixmap(":/窗帘关"));
    ui->label_up_home_2->setPixmap(QPixmap(":/灯关"));
    ui->label_up_home_3->setPixmap(QPixmap(":/窗帘关"));
    ui->label_down_home_2->setPixmap(QPixmap(":/灯关"));
    ui->label_down_home_3->setPixmap(QPixmap(":/窗帘关"));
    ui->label_sao_home_3->setPixmap(QPixmap(":/状态按钮_关"));
    ui->label_sao_home_4->setPixmap(QPixmap(":/扫地机关"));
    ui->label_lu_home_5->setPixmap(QPixmap(":/状态按钮_关"));
    ui->label_lu_home_6->setPixmap(QPixmap(":/路由器关"));
    ui->label_chuang_home_6->setPixmap(QPixmap(":/状态按钮_关"));
    ui->label_chuang_home_7->setPixmap(QPixmap(":/窗帘关"));
    ui->label_bing_home_7->setPixmap(QPixmap(":/状态按钮_关"));
    ui->label_bing_home_8->setPixmap(QPixmap(":/冰箱关"));
    ui->label_kong_home_8->setPixmap(QPixmap(":/状态按钮_关"));
    ui->label_kong_home_9->setPixmap(QPixmap(":/空调关"));
    ui->label_deng_home_9->setPixmap(QPixmap(":/状态按钮_关"));
    ui->label_deng_home_10->setPixmap(QPixmap(":/灯关"));
    
    
    // ================ 1. 初始化图片循环器 ================
        imageCycler = new ImageCycler();
        imageCycler->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
        imageCycler->addImagePath(":/susu");   // 替换为实际资源路径
        imageCycler->addImagePath(":/suuuu"); // 替换为实际资源路径
    
        // ================ 2. 构建控制按钮栏 ================
        QWidget *controlWidget = new QWidget(this);
        QHBoxLayout *controlLayout = new QHBoxLayout(controlWidget);
        
        
//        QPushButton *startBtn = new QPushButton("开始", this);
//        QPushButton *addBtn = new QPushButton("添加图片", this);
//        controlLayout->addWidget(startBtn);
//        controlLayout->addWidget(addBtn);
//        controlLayout->addStretch(); // 右对齐效果
        // 替换原来的按钮创建代码
        connect(ui->pushButton_widget9_start, &QPushButton::clicked, this, &Widget_funcC_Smart_Home::onStartStopClicked);
        connect(ui->pushButton_widget9_add, &QPushButton::clicked, this, &Widget_funcC_Smart_Home::onAddImageClicked);
    
        // ================ 3. 组装Widget_9的布局 ================
        QVBoxLayout *widget9Layout = new QVBoxLayout(ui->widget_9);
        widget9Layout->setContentsMargins(0, 0, 0, 0);
        widget9Layout->addWidget(imageCycler);    // 图片占上半部分
        widget9Layout->addWidget(controlWidget);  // 按钮栏占下半部分
    
        // ================ 4. 连接信号槽 ================
//        connect(startBtn, &QPushButton::clicked, this, &Widget_funcC_Smart_Home::onStartStopClicked);
//        connect(addBtn, &QPushButton::clicked, this, &Widget_funcC_Smart_Home::onAddImageClicked);
        
        
    // 连接按钮信号
    connect(ui->label_return_home , &Button_home_start::signals_start , this , &Widget_funcC_Smart_Home::slots_button_start);
    connect(ui->label_run_home , &Button_home_start::signals_start , this , &Widget_funcC_Smart_Home::slots_button_start);
    connect(ui->label_up_home_1 , &Button_home_start::signals_start , this , &Widget_funcC_Smart_Home::slots_button_start);
    connect(ui->label_down_home_1 , &Button_home_start::signals_start , this , &Widget_funcC_Smart_Home::slots_button_start);
    connect(ui->label_sao_home_3 , &Button_home_start::signals_start , this , &Widget_funcC_Smart_Home::slots_button_start);
    connect(ui->label_lu_home_5 , &Button_home_start::signals_start , this , &Widget_funcC_Smart_Home::slots_button_start);
    connect(ui->label_chuang_home_6, &Button_home_start::signals_start , this , &Widget_funcC_Smart_Home::slots_button_start);
    connect(ui->label_bing_home_7 , &Button_home_start::signals_start , this , &Widget_funcC_Smart_Home::slots_button_start);
    connect(ui->label_kong_home_8 , &Button_home_start::signals_start , this , &Widget_funcC_Smart_Home::slots_button_start);
    connect(ui->label_deng_home_9 , &Button_home_start::signals_start , this , &Widget_funcC_Smart_Home::slots_button_start);

    
    
    // 添加音乐播放器到 widget_13
       if (!ui->widget_13->layout()) {
           ui->widget_13->setLayout(new QVBoxLayout());
           ui->widget_13->layout()->setContentsMargins(0, 0, 0, 0);
       }
       
       music_player *musicPlayer = new music_player(ui->widget_13);
       musicPlayer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
       musicPlayer->addMusic("个人歌曲","苏新皓", "纯安利，无歌曲",
                             ":/music/custom.mp3",":/susu","0112");
       
       ui->widget_13->layout()->addWidget(musicPlayer);
       
       
       /*************************** 新增：初始化摄像头控件 ***************************/
       // 1. 创建摄像头实例（检查widget_20是否存在）
          if (ui->widget_20) {
              cameraWidget = new widget_20(this);
              // 2. 设置摄像头尺寸（与容器匹配）
              cameraWidget->setFixedSize(ui->widget_20->size());
              // 3. 添加到界面布局
              if (ui->widget_20->layout()) {
                  ui->widget_20->layout()->addWidget(cameraWidget);
              } else {
                  QVBoxLayout *cameraLayout = new QVBoxLayout(ui->widget_20);
                  cameraLayout->setContentsMargins(0, 0, 0, 0);  // 去除边距
                  cameraLayout->addWidget(cameraWidget);
              }
              // 4. 关联摄像头状态变化
              connect(cameraWidget, &widget_20::cameraStateChanged, 
                      this, &Widget_funcC_Smart_Home::onCameraStateChanged);
          } else {
              qWarning() << "Error: ui->widget_20 not found in UI file!";
          }
    
}

Widget_funcC_Smart_Home::~Widget_funcC_Smart_Home()
{
    
    delete ui;
}

void Widget_funcC_Smart_Home::slots_button_start(bool start)
{
    
    QObject * temp = sender();
    // 离开
    if(temp == ui->label_run_home)
    {
        // 离家开
        ui->label_run_home->set_start(start);
        ui->label_return_home_2->set_start1(!start);
        ui->label_return_home_4->set_start2(!start);
        ui->label_run_home_2->set_start1(!start);
        ui->label_run_home_3->set_start2(!start);
        ui->label_run_home_4->set_start3(start);
        // 归家关
        ui->label_return_home->set_start(!start);
        ui->label_return_home_2->set_start1(start);
        ui->label_return_home_4->set_start2(start);
        ui->label_run_home_2->set_start1(start);
        ui->label_run_home_3->set_start2(start);
        ui->label_run_home_4->set_start3(!start);
        ui->label_run_home->set_start(start);
                // 归家时关闭摄像头
        //                if (start) {
        //                    if (start && cameraWidget) {
        //                               if (cameraWidget->getCameraState() != QCamera::ActiveState) {
        //                                   cameraWidget->publicToggleCamera(); // 调用公共接口
        //                               }
        //                           }
        //                }
    }
    // 归家
    if(temp == ui->label_return_home)
    {
        // 离家开
        ui->label_return_home->set_start(start);
        ui->label_return_home_2->set_start1(start);
        ui->label_return_home_4->set_start2(start);
        ui->label_run_home_2->set_start1(!start);
        ui->label_run_home_3->set_start2(!start);
        ui->label_run_home_4->set_start3(start);
        // 归家关
        ui->label_run_home->set_start(!start);
        ui->label_return_home_2->set_start1(!start);
        ui->label_return_home_4->set_start2(!start);
        ui->label_run_home_2->set_start1(!start);
        ui->label_run_home_3->set_start2(!start);
        ui->label_run_home_4->set_start3(!start);
        ui->label_return_home->set_start(start);
                // 离家时开启摄像头
//                if (start && cameraWidget) {
//                            if (cameraWidget->getCameraState() == QCamera::ActiveState) {
//                                cameraWidget->publicToggleCamera(); // 调用公共接口
//                            }
//                        }

    }
    // 起床按钮逻辑
       else if(temp == ui->label_up_home_1)
       {
           ui->label_up_home_1->set_start(start);
           if(start)
           {
               // 起床开：打开灯、空调、窗帘
               
               // 起床关闭（这里如果需求是起床按钮切换，可设置关闭对应设备，根据实际需求调整）
               ui->label_return_home_2->set_start1(!true);  // 假设控制灯
               ui->label_return_home_4->set_start2(!true);  // 假设控制空调
               ui->label_run_home_4->set_start3(!true);     // 假设控制窗帘
               ui->label_run_home_3->set_start1(!true);
               ui->label_run_home_2->set_start2(!true);     
               ui->label_up_home_3->set_start3(!true);      // 假设控制其他窗帘
               ui->label_up_home_2->set_start1(!true);
               ui->label_down_home_2->set_start1(!true);    // 假设控制其他灯
               ui->label_down_home_3->set_start3(!true);    // 假设控制其他窗帘
               
              
               
               // 关闭睡觉相关的标记（如果有）
               ui->label_down_home_1->set_start(false);
           }
           else
           {
               // 起床关闭（这里如果需求是起床按钮切换，可设置关闭对应设备，根据实际需求调整）
               ui->label_return_home_2->set_start1(true);  // 假设控制灯
               ui->label_return_home_4->set_start2(!true);  // 假设控制空调
               ui->label_run_home_4->set_start3(true);     // 假设控制窗帘
               ui->label_run_home_3->set_start1(true);
               ui->label_run_home_2->set_start2(!true);     
               ui->label_up_home_3->set_start3(true);      // 假设控制其他窗帘
               ui->label_up_home_2->set_start1(true);
               ui->label_down_home_2->set_start1(true);    // 假设控制其他灯
               ui->label_down_home_3->set_start3(true);    // 假设控制其他窗帘
               
               // 关闭睡觉相关的标记（如果有）
               ui->label_down_home_1->set_start(true);  
           }
       }
       // 睡觉按钮逻辑
       else if(temp == ui->label_down_home_1)
       {
           ui->label_down_home_1->set_start(start);
           if(start)
           {
               // 睡觉时：只打开空调，关闭灯和窗帘
               
               ui->label_return_home_2->set_start1(true);  // 假设控制灯
               ui->label_return_home_4->set_start2(!true);  // 假设控制空调
               ui->label_run_home_4->set_start3(true);     // 假设控制窗帘
               ui->label_run_home_3->set_start1(true);
               ui->label_run_home_2->set_start2(!true);     
               ui->label_up_home_3->set_start3(true);      // 假设控制其他窗帘
               ui->label_up_home_2->set_start1(true);
               ui->label_down_home_2->set_start1(true);    // 假设控制其他灯
               ui->label_down_home_3->set_start3(true);    // 假设控制其他窗帘
               
               // 关闭睡觉相关的标记（如果有）
               ui->label_up_home_1->set_start(!true);  
           }
           else
           {
               // 睡觉关闭（可根据需求调整，比如恢复之前状态等，这里简单关闭空调演示）
               
               ui->label_return_home_2->set_start1(!true);  // 假设控制灯
               ui->label_return_home_4->set_start2(!true);  // 假设控制空调
               ui->label_run_home_4->set_start3(!true);     // 假设控制窗帘
               ui->label_run_home_3->set_start1(!true);
               ui->label_run_home_2->set_start2(!true);     
               ui->label_up_home_3->set_start3(!true);      // 假设控制其他窗帘
               ui->label_up_home_2->set_start1(!true);
               ui->label_down_home_2->set_start1(!true);    // 假设控制其他灯
               ui->label_down_home_3->set_start3(!true);    // 假设控制其他窗帘
               
               
               
               // 关闭睡觉相关的标记（如果有）
               ui->label_up_home_1->set_start(true);
           }
       }
    
    // 扫地机按钮逻辑
       else if(temp == ui->label_sao_home_3)
       {
           ui->label_sao_home_3->set_start(start);
           if(start)
           {
               ui->label_6->setText("NO");
               ui->label_sao_home_4->set_start4(!true);
           }
           else
           {
               ui->label_6->setText("OFF");
               ui->label_sao_home_4->set_start4(true);
           }
       }
    // 路由器按钮逻辑
       else if(temp == ui->label_lu_home_5)
       {
           ui->label_lu_home_5->set_start(start);
           if(start)
           {
               ui->label_7->setText("NO");
               ui->label_lu_home_6->set_start5(!true);
           }
           else
           {
               ui->label_7->setText("OFF");
               ui->label_lu_home_6->set_start5(true);
           }
       }
    // 窗帘按钮逻辑
       else if(temp == ui->label_chuang_home_6)
       {
           ui->label_chuang_home_6->set_start(start);
           if(start)
           {
               ui->label_8->setText("NO");
               ui->label_chuang_home_7->set_start3(!true);
           }
           else
           {
               ui->label_8->setText("OFF");
               ui->label_chuang_home_7->set_start3(true);
           }
       }
    // 冰箱按钮逻辑
       else if(temp == ui->label_bing_home_7)
       {
           ui->label_bing_home_7->set_start(start);
           if(start)
           {
               ui->label_9->setText("NO");
               ui->label_bing_home_8->set_start6(!true);
           }
           else
           {
               ui->label_9->setText("OFF");
               ui->label_bing_home_8->set_start6(true);
           }
       }
    // 空调按钮逻辑
       else if(temp == ui->label_kong_home_8)
       {
           ui->label_kong_home_8->set_start(start);
           if(start)
           {
               ui->label_10->setText("NO");
               ui->label_kong_home_9->set_start2(!true);
           }
           else
           {
               ui->label_10->setText("OFF");
               ui->label_kong_home_9->set_start2(true);
           }
       }
    // 灯按钮逻辑
       else if(temp == ui->label_deng_home_9)
       {
           ui->label_deng_home_9->set_start(start);
           if(start)
           {
               ui->label_11->setText("NO");
               ui->label_deng_home_10->set_start1(!true);
           }
           else
           {
               ui->label_11->setText("OFF");
               ui->label_deng_home_10->set_start1(true);
           }
       }
}

void Widget_funcC_Smart_Home::slots_button_send_message()
{
    // 增加一个widget  内部包含
    
}



void Widget_funcC_Smart_Home::onImageChanged(int index)
{
    qDebug() << "当前显示图片索引：" << index;
    // 这里可以添加更多针对图片切换后的处理逻辑，比如更新界面显示的图片序号文本等
}
void Widget_funcC_Smart_Home::onStartStopClicked()
{
    if (imageCycler->isCycling()) {
        imageCycler->stopCycle();
        ui->pushButton_widget9_start->setText("开始");
    } else {
        imageCycler->startCycle();
        ui->pushButton_widget9_start->setText("停止");
    }
}

void Widget_funcC_Smart_Home::onAddImageClicked()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("添加图片"),
                                                  QDir::homePath(),
                                                  tr("图片文件 (*.png *.jpg *.bmp)"));
    
    if (!fileName.isEmpty()) {
        imageCycler->addImagePath(fileName);
        QMessageBox::information(this, "提示", "图片添加成功!");
    }
}


void Widget_funcC_Smart_Home::onCameraStateChanged()
{
//    if (!cameraWidget || !ui->label_camera_status) return;
        
//        if (cameraWidget->getCameraState() == QCamera::ActiveState) { // 使用公共接口
//            ui->label_camera_status->setText("摄像头已开启");
//        } else {
//            ui->label_camera_status->setText("摄像头已关闭");
//        }
}
